//:rs232

#include <16f877a.h>
#fuses HS,NOWDT,PUT,NOPROTECT,NOBROWNOUT,NOLVP,NOCPD
#use delay(clock=4000000)

#define BAJO 4.50

#define A_MOTOR2 PIN_B4
#define B_MOTOR2 PIN_B5
#define C_MOTOR2 PIN_B6
#define D_MOTOR2 PIN_B7

#define A_MOTOR1 PIN_B0
#define B_MOTOR1 PIN_B1
#define C_MOTOR1 PIN_B2
#define D_MOTOR1 PIN_b3

int8 paso_actual=1;
int8 paso_motor2=1;

void motor1_adelante (int8 NumeroPasos){
	int8 PasosRecorridos=1;
	for (PasosRecorridos=1; PasosRecorridos<=NumeroPasos; PasosRecorridos++){
		if(paso_actual==1){
			output_high(A_MOTOR1);
			output_low(B_MOTOR1);
			output_high(C_MOTOR1);
			output_low(D_MOTOR1);
			paso_actual=2;
		}
		else if(paso_actual==2){
			output_high(A_MOTOR1);
			output_low(B_MOTOR1);
			output_low(C_MOTOR1);
			output_high(D_MOTOR1);
			paso_actual=3;
		}
		else if(paso_actual==3){
			output_low(A_MOTOR1);
			output_high(B_MOTOR1);
			output_low(C_MOTOR1);
			output_high(D_MOTOR1);
			paso_actual=4;
		}
		else if(paso_actual==4){
			output_low(A_MOTOR1);
			output_high(B_MOTOR1);
			output_high(C_MOTOR1);
			output_low(D_MOTOR1);
			paso_actual=1;
		}

		delay_ms(10);

	}

}


void motor1_atras (int8 NumeroPasos){
	int8 PasosRecorridos=1;
	for (PasosRecorridos=1; PasosRecorridos<=NumeroPasos; PasosRecorridos++){
		if(paso_actual==1){

			output_low(A_MOTOR1); //Cuatro
			output_high(B_MOTOR1);
			output_high(C_MOTOR1);
			output_low(D_MOTOR1);
			paso_actual=4;
		}
		else if(paso_actual==2){
			output_high(A_MOTOR1); //uno
			output_low(B_MOTOR1);
			output_high(C_MOTOR1);
			output_low(D_MOTOR1);
			paso_actual=1;


		}
		else if(paso_actual==3){
			output_high(A_MOTOR1);//Dos
			output_low(B_MOTOR1);
			output_low(C_MOTOR1);
			output_high(D_MOTOR1);
			paso_actual=2;
		}
		else if(paso_actual==4){
			output_low(A_MOTOR1);//Tres
			output_high(B_MOTOR1);
			output_low(C_MOTOR1);
			output_high(D_MOTOR1);
			paso_actual=3;
		}

		delay_ms(10);

	}

}




//
void motor2 (int8 NumeroPasos){
	int8 PasosRecorridos=1;
	for (PasosRecorridos=1; PasosRecorridos<=NumeroPasos; PasosRecorridos++){
		if(paso_motor2==1){
			output_high(A_MOTOR2);
			output_low(B_MOTOR2);
			output_high(C_MOTOR2);
			output_low(D_MOTOR2);
			paso_motor2=2;
		}
		else if(paso_motor2==2){
			output_high(A_MOTOR2);
			output_low(B_MOTOR2);
			output_low(C_MOTOR2);
			output_high(D_MOTOR2);
			paso_motor2=3;
		}
		else if(paso_motor2==3){
			output_low(A_MOTOR2);
			output_high(B_MOTOR2);
			output_low(C_MOTOR2);
			output_high(D_MOTOR2);
			paso_motor2=4;
		}
		else if(paso_motor2==4){
			output_low(A_MOTOR2);
			output_high(B_MOTOR2);
			output_high(C_MOTOR2);
			output_low(D_MOTOR2);
			paso_motor2=1;
		}

		delay_ms(10);

	}

}


void motor2_1 (int8 NumeroPasos){
	int8 PasosRecorridos=1;
	for (PasosRecorridos=1; PasosRecorridos<=NumeroPasos; PasosRecorridos++){
		if(paso_motor2==1){

			output_low(A_MOTOR2); //Cuatro
			output_high(B_MOTOR2);
			output_high(C_MOTOR2);
			output_low(D_MOTOR2);
			paso_motor2=4;
		}
		else if(paso_motor2==2){
			output_high(A_MOTOR2); //uno
			output_low(B_MOTOR2);
			output_high(C_MOTOR2);
			output_low(D_MOTOR2);
			paso_motor2=1;


		}
		else if(paso_motor2==3){
			output_high(A_MOTOR2);//Dos
			output_low(B_MOTOR2);
			output_low(C_MOTOR2);
			output_high(D_MOTOR2);
		paso_motor2=2;
		}
		else if(paso_motor2==4){
			output_low(A_MOTOR2);//Tres
			output_high(B_MOTOR2);
			output_low(C_MOTOR2);
			output_high(D_MOTOR2);
			paso_motor2=3;
		}

		delay_ms(10);

	}

}

void main (void){
	
    float voltaje; 
	setup_adc_ports(AN0_AN1_AN3);
	setup_adc(ADC_clock_INTERNAL);
	set_adc_channel(0);

	while(1){
		voltaje=(float) read_adc()*0.0196078;
		if(voltaje>BAJO){
		   	if(input(PIN_d1)==1){
			motor1_adelante(3);
			delay_ms(1000);
			motor1_atras(3);
			delay_ms(1000);	
			motor2(3);
			delay_ms(1000);
			motor2_1(3);
			delay_ms(1000);	


			}
		}
	}
}
